package com.t.bricks.bussiness.service.tidings.impl;

import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.t.bricks.bussiness.db.dao.tidings.TidingsDao;
import com.t.bricks.bussiness.db.entity.tidings.Tidings;
import com.t.bricks.bussiness.service.tidings.TidingsService;
import com.t.bricks.model.MsgEmity;
import com.t.bricks.utils.function.date.TimeUtil;
import com.t.bricks.utils.spring.ModuleUtil;

/**
 * 消息管理'Tidings表'基本业务操作类接口实现
 */
@Service
public class TidingsServiceImpl implements TidingsService {

	@Autowired
	private TidingsDao tidingsDao;

	/**
	 * 新增
	 * @param tidings 消息管理 对象实体,注意:跨包访问时可能会是json字符串
	 * @return MsgEmity
	 */
	@Override
	public MsgEmity add(Object tidings) {
		MsgEmity me = ModuleUtil.objToEntity(tidings, Tidings.class);//转换数据,因为如果传递的是String,则可能是进行了跨包访问,要先用Json转换成实体对象
		if (!me.isSuccess()) {
			return me;
		}
		
		Tidings tidingsData = me.getData();
		
		String sSendeeName = tidingsData.getsSendeeName();
		if (null == sSendeeName || "".equals(sSendeeName.trim())) {
			return MsgEmity.err(8201, "接收人信息为空");
		}
		
		tidingsData.setiSendeeDel(0);
		tidingsData.setiCreatorDel(0);

		me = ModuleUtil.validDbEntityByAdd(tidingsData);// 通用的基本数据验证,如果要进行比较复杂的数据验证则可以屏蔽掉此方法自行编写
		if (!me.isSuccess()) {
			return me;
		}
		
		tidingsData.setiId(null);//清空记录编号
		tidingsData.setsCreatorName(ModuleUtil.currentLoginUserName());
		
		me = ModuleUtil.supplyDbEntityAttrByAdd(tidingsData);// 补充数据,如添加id、当前用户、当前时间等
		if (!me.isSuccess()) {
			return me;
		}
		
		return tidingsDao.add(tidingsData);
	}

	/**
	 * 搜索关键字对应的记录
	 * @param likeStr
	 * @param sUserId
	 * @return
	 */
	@Override
	public MsgEmity search(String likeStr) {
		if (null == likeStr || "".equals(likeStr.trim())) {
			return new MsgEmity(false, "关键字不能为空！", 8001);
		}
		
		return tidingsDao.search(likeStr, ModuleUtil.currentLoginUserId());
	}

	/**
	 * 消息标记'删除'
	 * @param iId 记录编号
	 * @param isSsendee 是否接收者(不是接收者就是发送者)
	 * @return
	 */
	@Override
	public MsgEmity delSign(Long iId, Integer isSsendee) {
		if (null == iId || iId.longValue() < 1) {
			return new MsgEmity(false, "信息编号参数错误，请刷新重试！", 8001);
		}

		return tidingsDao.delSign(iId, isSsendee == 1 ? true : false, ModuleUtil.currentLoginUserId());
	}
	
	/**
	 * 查询指定用户指定时间的对话信息
	 * @param dateSt 开始时间
	 * @param dateEd 结束时间
	 * @return List<Tidings>
	 */
	@Override
	public MsgEmity findByDate(String dateSt, String dateEd) {
		if (null == dateSt || "".equals(dateSt)) {
			return new MsgEmity(false, "开始时间不能为空！", 8002);
		}

		if (null == dateEd || "".equals(dateEd)) {
			return new MsgEmity(false, "结束时间不能为空！", 8002);
		}
		
		Date stDate = TimeUtil.toDate(dateSt);
		Date edDate = TimeUtil.toDate(dateEd);
		String sUserId = ModuleUtil.currentLoginUserId();
		
		return tidingsDao.findByDate(stDate, edDate, sUserId);
	}

}
